using System;
using System.Collections.Generic;
using System.Text;
using JobShopModel.Model.FactoryLvl;
using JobShopModel.Model;

namespace JobShopModel.Events
{
    /// <summary>
    /// Interface represententing an Event
    /// Backbone of a discrete simulation
    /// Must keep track of the time it will be excecuted
    /// Must implement a process to be excecuted in the "simulation loop"
    /// </summary>
    /// <seealso cref="EventQueue"/>
    /// <seealso cref="Factory"/>
    public interface IEvent:IComparable<IEvent>
    {

        /// <summary>
        /// Property:
        /// Time the event must be excuted
        /// Read Only, must be set by the constructor of the implementation,
        /// Will be used to store the Event in the <seealso cref="EventQueue"/>
        /// </summary>
        Time ExecTime
        {
            get;

        }

        /// <summary>
        /// Gets the current logger being written to
        /// </summary>
        Logger Logger
        {
            get;
        }

        /// <summary>
        /// Polymorphic method
        /// It will be instanced by all Events and excecuted by the eventloop
        /// </summary>
        void Process();

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>


    }
}
